/*
 * Copyright 2013 University of Padua, Italy
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package it.dei.unipd.healthservice.database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import it.dei.unipd.healthservice.resource.*;

/**
 * Crea un nuovo recapito
 * 
 * @author Nicola Salmaso
 * @version 1.00
 */
public class CreateRecapitoDatabase {
	/**
	 * Query di inserimento nuovo recapito nel database
	 */
	private static final String STATEMENT = "INSERT INTO recapito("+
            "ragione_sociale, stato, provincia, citta, indirizzo, cap)"+
            "VALUES (?, ?, ?, ?, ?, ?)";
	
	/**
	 * Connessione al database
	 */
	private final Connection con;
	
	/**
	 * Email dell'utente possessore del recapito
	 */
	private final String mail;
	
	/**
	 * Recapito da creare
	 */
	private final Recapito recapito;
	/**
	 * Crea una nuova fabbrica
	 * 
	 * @param con
	 * connessione al database.
	 * @param recapito
	 * recapito da inserire.
	 * @param mail
	 * email del cliente
	 */
	public CreateRecapitoDatabase(Connection con, Recapito recapito,String mail) {
		this.con = con;
		this.recapito = recapito;
		this.mail=mail;
	}
	/**
	 * crea il recapito.
	 * 
	 * @return Integer idDecapito
	 * 				l'id del recapito appena inserito, -1 in caso di errore
	 * @throws SQLException
	 *             in caso di problemi nell'accesso al database.
	 */
	public Integer createRecapito() throws SQLException {
		PreparedStatement pstmt = null;
		String ragSociale="", stato="", provincia="",indirizzo="",cap="",citta="";
		try {
			pstmt = con.prepareStatement(STATEMENT);
			ragSociale = recapito.getRagsociale();
			stato = recapito.getStato();
			provincia = recapito.getProvincia();
			indirizzo = recapito.getIndirizzo();
			cap = recapito.getCap();
			citta = recapito.getCitta();
			pstmt.setString(1, ragSociale);
			pstmt.setString(2, stato);
			pstmt.setString(3, provincia);
			pstmt.setString(4, citta);
			pstmt.setString(5, indirizzo);
			pstmt.setString(6, cap);
			if (cap==null || recapito.getCap().length()!=5)
				throw new SQLException("Cap non valido");	
			pstmt.execute();
	
			return new ViewRecapitiDatabase(con,mail,ragSociale,stato,provincia,citta,indirizzo,cap).getIdRecapito();
	
		}
		finally {
			if (pstmt != null)
				pstmt.close();
			con.close();
		}
	}
}